package com.thunderbit;

public class Bitmap {
    private byte[] bits;
    private int size;

    // 构造函数，指定位图大小（比特位数量）
    public Bitmap(int size) {
        this.size = size;
        this.bits = new byte[(size + 7) / 8]; // 1 byte = 8 bits
    }

    // 设置某一位为1
    public void set(int index) {
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException("Index out of bounds");
        }
        bits[index / 8] |= (1 << (index % 8));
    }

    // 清除某一位，将其设置为0
    public void clear(int index) {
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException("Index out of bounds");
        }
        bits[index / 8] &= ~(1 << (index % 8));
    }

    // 检查某一位是否为1
    public boolean get(int index) {
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException("Index out of bounds");
        }
        return (bits[index / 8] & (1 << (index % 8))) != 0;
    }

    // 获取位图的大小（比特位数量）
    public int getSize() {
        return size;
    }

    public static void main(String[] args) {
        Bitmap bitmap = new Bitmap(16); // 创建一个大小为16位的位图

        bitmap.set(3); // 将第3位设置为1
        bitmap.set(7); // 将第7位设置为1

        System.out.println(bitmap.get(3)); // 输出 true
        System.out.println(bitmap.get(7)); // 输出 true
        System.out.println(bitmap.get(4)); // 输出 false

        bitmap.clear(3); // 将第3位设置为0
        System.out.println(bitmap.get(3)); // 输出 false
    }
}
